#include <iostream>
#include <iomanip>
using std::fixed;
using std::setprecision;
using std::cout;
using std::cin;
using std::endl;

#define PI 3.14
/*
编写一个圆柱体类Cylinder，它继承于上面的Circle类，还拥有：

① 1个成员变量，圆柱体的高；
② 构造方法
Cylinder (double r, double h) //创建Circle对象时将半径初始化为r
③ 成员方法
double getVolume( ) //获取圆柱体的体积
void showVolume( ) //将圆柱体的体积输出到屏幕
编写应用程序，创建类的对象，分别设置圆的半径、圆柱体的高，
计算并分别显示圆半径、圆面积、圆周长，圆柱体的体积。
*/
//圆
class Circle {
public:
    //将半径设为0
    Circle()
        :m_r(0)
    {
    }
    //创建Circle对象时将半径初始化为r
    Circle(double r)
        :m_r(r)
    {
    }
    //将圆的半径、周长、面积输出到屏幕
    void show() {
        cout << fixed << setprecision(2) << "r = " << m_r << endl;
        cout << fixed << setprecision(2) << "Area = " << getArea() << endl;
        cout << fixed << setprecision(2) << "Perimeter = " << getPerimeter() << endl;
    }
protected:
    //获取圆的面积
    double getArea() {
        return PI * PI * m_r * m_r;
    }
    //获取圆的周长
    double getPerimeter() {
        return 2 * PI * m_r;
    }

private:
    double m_r;
};
//圆柱
class Cylinder
    :public Circle
{
public:
    //创建Circle对象时将半径初始化为r
    Cylinder(double r, double h)
        :Circle(r)
        , m_h(h)
    {
    }
    //将圆柱体的体积输出到屏幕
    void showVolume() {
        cout << fixed << setprecision(2) << "Volume:"
            << getVolume() << endl;
    }
protected:
    //获取圆柱体的体积
    double getVolume() {
        return getArea() * m_h;
    }
private:
    int m_h;
};


void test() {
    Cylinder c(1, 2);
    c.show();
    c.showVolume();

}
int main() {
    test();
    return 0;
}